package nl.ruudshuis.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import nl.ruudshuis.beans.GebruikerBean;
import nl.ruudshuis.db.DBmanager;

public class GebruikersDao {

	private String getGebruiker = "SELECT * FROM GEBRUIKER WHERE email = ?";
	private String getGebruikerOpID = "SELECT * FROM GEBRUIKER WHERE userId = ?";
	private String createGebruiker = "INSERT INTO GEBRUIKER (email, pass, woonplaats, telnr) VALUES ( ?, ?, ?, ?)";
	private String checkLogin = "SELECT * FROM GEBRUIKER WHERE email =? AND pass =?";

	private Connection con = null;
	private PreparedStatement psGetGebruiker = null;
	private PreparedStatement psGetGebruikerID = null;
	private PreparedStatement psCreateGebruiker = null;
	private PreparedStatement psCheckLogin = null;

	public GebruikersDao(DBmanager db) {
		DBmanager myDb = db;
		con = myDb.getConnection();
		try {

			this.psGetGebruiker = con.prepareStatement(getGebruiker);
			this.psGetGebruikerID = con.prepareStatement(getGebruikerOpID);
			this.psCreateGebruiker = con.prepareStatement(createGebruiker);
			this.psCheckLogin = con.prepareStatement(checkLogin);

		} catch (SQLException se) {
			printSQLException(se);
		}
	}
	
	public void createGebruiker(String email, String pass, String woonplaats, String telnr){
		try {
			psCreateGebruiker.clearParameters();
			
			psCreateGebruiker.setString(1, email);
			psCreateGebruiker.setString(2, pass);
			psCreateGebruiker.setString(3, woonplaats);
			psCreateGebruiker.setString(4, telnr);			
			int resultaat = psCreateGebruiker.executeUpdate();
			if (resultaat == 0) {
				System.out.println("nix done");
			}
		} catch (SQLException se) {
			printSQLException(se);
		}
	}
	
	public GebruikerBean getGebruikerOpID(int userId){
		GebruikerBean g = null;

		try {
			psGetGebruikerID.setInt(1, userId);
			ResultSet rs = psGetGebruikerID.executeQuery();

			if (rs.next()) {
				int id = rs.getInt("userId");
				String email = rs.getString("email");
				String pass = rs.getString("pass");
				String woonplaats = rs.getString("woonplaats");
				String telnr = rs.getString("telnr");
				g = new GebruikerBean();
				g.setAll(id, email, pass, woonplaats, telnr);
			}

			rs.close();

		} catch (SQLException se) {
			printSQLException(se);
		}
		
		return g;
	}

	public GebruikerBean getGebruiker(String emailUser) {
		
		GebruikerBean g = null;

		try {
			psGetGebruiker.setString(1, emailUser);
			ResultSet rs = psGetGebruiker.executeQuery();

			if (rs.next()) {
				int id = rs.getInt("userId");
				String email = rs.getString("email");
				String pass = rs.getString("pass");
				String woonplaats = rs.getString("woonplaats");
				String telnr = rs.getString("telnr");
				g = new GebruikerBean();
				g.setAll(id, email, pass, woonplaats, telnr);
			}

			rs.close();

		} catch (SQLException se) {
			printSQLException(se);
		}
		
		return g;
		
	}

	public GebruikerBean checkLogin(String emailUser, String password){

		GebruikerBean g = null;
		try {
			psCheckLogin.setString(1, emailUser);
			psCheckLogin.setString(2, password);
			ResultSet rs = psCheckLogin.executeQuery();

			if (rs.next() ) {
				int id = rs.getInt("userId");
				String email = rs.getString("email");
				String pass = rs.getString("pass");
				String woonplaats = rs.getString("woonplaats");
				String telnr = rs.getString("telnr");
				g = new GebruikerBean();
				g.setAll(id, email, pass, woonplaats, telnr);
			}

			rs.close();

		} catch (SQLException se) {
			printSQLException(se);
		}
		
		return g;
	}
	
	private void printSQLException(SQLException se) {
		while (se != null) {

			System.out.print("SQLException: State:   " + se.getSQLState());
			System.out.println("Severity: " + se.getErrorCode());
			System.out.println(se.getMessage());
			se.printStackTrace();

			se = se.getNextException();
		}
	}
}
